Interpreted languages, such as Java, are high-level languages compiled to an intermediate level that requires an extra level of indirection to execute. For example, an interpreted language, such as Java, is independent of the hardware platform. It is generally more difficult for software code written in an interpreted language to breach the security of the host system which is executing the intermediate level code.
Java is an object-oriented, multi-threaded programming language that compiles to a compact intermediate form known as bytecodes. Java is a common interpreted language which is used to transfer applications over the internet. Traditional Java technology generally cannot be efficiently applied for embedded software development. Java bytecode may be either directly executed by a Java bytecode interpreter or accelerated by a Just-In-Time (JIT) complier. Both methods have their advantages and drawbacks. Java bytecode interpreters require no or little memory for execution, but the speed of interpretation is relatively slow. Conventional JIT compilers are too big for embedded applications and use a lot of memory, although JIT compilers provide significant acceleration by compiling Java bytecode into a native language at run-time. Some compilers minimize the resources used by compiling only performance-crucial fragments of applications. However, these compiled fragments may contain relatively complex instructions (e.g. method invocation instructions), which results in huge generated code and additional overhead for compilation.
Skilled artisans appreciate that elements in the figures are illustrated for simplicity and clarity and have not necessarily been drawn to scale. For example, the dimensions of some of the elements in the figures may be exaggerated relative to other elements to help improve the understanding of the embodiments of the present invention.